home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 24 / AACD 24.iso / AACD / Programming / gcc-2.95.3-3 / include / g++-3 / stl_config.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-07-15  |  11.6 KB  |  357 lines

  1. /*
  2.  *
  3.  * Copyright (c) 1994
  4.  * Hewlett-Packard Company
  5.  *
  6.  * Permission to use, copy, modify, distribute and sell this software
  7.  * and its documentation for any purpose is hereby granted without fee,
  8.  * provided that the above copyright notice appear in all copies and
  9.  * that both that copyright notice and this permission notice appear
  10.  * in supporting documentation.  Hewlett-Packard Company makes no
  11.  * representations about the suitability of this software for any
  12.  * purpose.  It is provided "as is" without express or implied warranty.
  13.  *
  14.  * Copyright (c) 1997
  15.  * Silicon Graphics
  16.  *
  17.  * Permission to use, copy, modify, distribute and sell this software
  18.  * and its documentation for any purpose is hereby granted without fee,
  19.  * provided that the above copyright notice appear in all copies and
  20.  * that both that copyright notice and this permission notice appear
  21.  * in supporting documentation.  Silicon Graphics makes no
  22.  * representations about the suitability of this software for any
  23.  * purpose.  It is provided "as is" without express or implied warranty.
  24.  *
  25.  */
  26.  
  27. #ifndef __STL_CONFIG_H
  28. # define __STL_CONFIG_H
  29.  
  30. // Flags:
  31. // * __STL_NO_BOOL: defined if the compiler doesn't have bool as a builtin
  32. //   type.
  33. // * __STL_HAS_WCHAR_T: defined if the compier has wchar_t as a builtin type.
  34. // * __STL_NO_DRAND48: defined if the compiler doesn't have the drand48
  35. //   function.
  36. // * __STL_STATIC_TEMPLATE_MEMBER_BUG: defined if the compiler can't handle
  37. //   static members of template classes.
  38. // * __STL_CLASS_PARTIAL_SPECIALIZATION: defined if the compiler supports
  39. //   partial specialization of template classes.
  40. // * __STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler
  41. //   supports partial specialization syntax for full specialization of
  42. //   class templates.  (Even if it doesn't actually support partial
  43. //   specialization itself.)
  44. // * __STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports
  45. //   partial ordering of function templates.  (a.k.a partial specialization
  46. //   of function templates.)
  47. // * __STL_MEMBER_TEMPLATES: defined if the compiler supports template
  48. //   member functions of classes.
  49. // * __STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports
  50. //   nested classes that are member templates of other classes.
  51. // * __STL_EXPLICIT_FUNCTION_TMPL_ARGS: defined if the compiler
  52. //   supports calling a function template by providing its template
  53. //   arguments explicitly.
  54. // * __STL_LIMITED_DEFAULT_TEMPLATES: defined if the compiler is unable
  55. //   to handle default template parameters that depend on previous template
  56. //   parameters.
  57. // * __STL_NON_TYPE_TMPL_PARAM_BUG: defined if the compiler has trouble with
  58. //   function template argument deduction for non-type template parameters.
  59. // * __SGI_STL_NO_ARROW_OPERATOR: defined if the compiler is unable
  60. //   to support the -> operator for iterators.
  61. // * __STL_USE_EXCEPTIONS: defined if the compiler (in the current compilation
  62. //   mode) supports exceptions.
  63. // * __STL_USE_NAMESPACES: defined if the compiler has the necessary
  64. //   support for namespaces.
  65. // * __STL_NO_EXCEPTION_HEADER: defined if the compiler does not have a
  66. //   standard-conforming header <exception>.
  67. // * __STL_SGI_THREADS: defined if this is being compiled for an SGI IRIX
  68. //   system in multithreaded mode, using native SGI threads instead of
  69. //   pthreads.
  70. // * __STL_WIN32THREADS: defined if this is being compiled on a WIN32
  71. //   compiler in multithreaded mode.
  72. // * __STL_LONG_LONG if the compiler has long long and unsigned long long
  73. //   types.  (They're not in the C++ standard, but they are expected to be
  74. //   included in the forthcoming C9X standard.)
  75.  
  76.  
  77. // User-settable macros that control compilation:
  78. // * __STL_USE_SGI_ALLOCATORS: if defined, then the STL will use older
  79. //   SGI-style allocators, instead of standard-conforming allocators,
  80. //   even if the compiler supports all of the language features needed
  81. //   for standard-conforming allocators.
  82. // * __STL_NO_NAMESPACES: if defined, don't put the library in namespace
  83. //   std, even if the compiler supports namespaces.
  84. // * __STL_ASSERTIONS: if defined, then enable runtime checking through the
  85. //   __stl_assert macro.
  86. // * _PTHREADS: if defined, use Posix threads for multithreading support.
  87. // * _NOTHREADS: if defined, don't use any multithreading support.
  88.  
  89.  
  90. // Other macros defined by this file:
  91.  
  92. // * bool, true, and false, if __STL_NO_BOOL is defined.
  93. // * typename, as a null macro if it's not already a keyword.
  94. // * explicit, as a null macro if it's not already a keyword.
  95. // * namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.)
  96. // * exception-related macros (__STL_TRY, __STL_UNWIND, etc.)
  97. // * __stl_assert, either as a test or as a null macro, depending on
  98. //   whether or not __STL_ASSERTIONS is defined.
  99.  
  100. #ifdef _PTHREADS
  101. #   define __STL_PTHREADS
  102. #endif
  103. #ifdef _SOLTHREADS
  104. #   define __STL_SOLTHREADS
  105. #endif
  106.  
  107. # if defined(__sgi) && !defined(__GNUC__)
  108. #   if !defined(_BOOL)
  109. #     define __STL_NO_BOOL
  110. #   endif
  111. #   if defined(_WCHAR_T_IS_KEYWORD)
  112. #     define __STL_HAS_WCHAR_T
  113. #   endif
  114. #   if !defined(_TYPENAME_IS_KEYWORD)
  115. #     define __STL_NEED_TYPENAME
  116. #   endif
  117. #   ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
  118. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  119. #   endif
  120. #   ifdef _MEMBER_TEMPLATES
  121. #     define __STL_MEMBER_TEMPLATES
  122. #     define __STL_MEMBER_TEMPLATE_CLASSES
  123. #   endif
  124. #   if defined(_MEMBER_TEMPLATE_KEYWORD)
  125. #     define __STL_MEMBER_TEMPLATE_KEYWORD
  126. #   endif
  127. #   if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32
  128. #     define __STL_MEMBER_TEMPLATE_KEYWORD
  129. #   endif
  130. #   if !defined(_EXPLICIT_IS_KEYWORD)
  131. #     define __STL_NEED_EXPLICIT
  132. #   endif
  133. #   ifdef __EXCEPTIONS
  134. #     define __STL_USE_EXCEPTIONS
  135. #   endif
  136. #   if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)
  137. #     define __STL_HAS_NAMESPACES
  138. #   endif
  139. #   if (_COMPILER_VERSION < 721)
  140. #     define __STL_NO_EXCEPTION_HEADER
  141. #   endif
  142. #   if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
  143. #     define __STL_SGI_THREADS
  144. #   endif
  145. #   if defined(_LONGLONG) && defined(_SGIAPI) && _SGIAPI
  146. #     define __STL_LONG_LONG
  147. #   endif
  148. # endif
  149.  
  150. # ifdef __GNUC__
  151. #   include <_G_config.h>
  152. #   define __STL_HAS_WCHAR_T
  153. #   if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
  154. #     define __STL_STATIC_TEMPLATE_MEMBER_BUG
  155. #     define __STL_NEED_TYPENAME
  156. #     define __STL_NEED_EXPLICIT
  157. #   else
  158. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  159. #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
  160. #     define __STL_MEMBER_TEMPLATES
  161. #     define __STL_MEMBER_TEMPLATE_CLASSES
  162. #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  163. #     define __STL_HAS_NAMESPACES
  164. #     define __STL_NO_NAMESPACES
  165. #     define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
  166. #     define __STL_USE_NAMESPACES
  167. #   endif
  168. #   if defined(__linux__)
  169.      /* glibc pre 2.0 is very buggy. We have to disable thread for it.
  170.         It should be upgraded to glibc 2.0 or later. */
  171. #    if !defined(_NOTHREADS) && __GLIBC__ >= 2 && defined(_G_USING_THUNKS)
  172. #      define __STL_PTHREADS
  173. #      ifdef __STRICT_ANSI__
  174.          /* Work around a bug in the glibc 2.0.x pthread.h.  */
  175. #        define sigset_t __sigset_t
  176. #      endif
  177. #    endif
  178. #   endif
  179. #   ifdef __EXCEPTIONS
  180. #     define __STL_USE_EXCEPTIONS
  181. #   endif
  182. #   ifndef __STRICT_ANSI__
  183. #     define __STL_LONG_LONG
  184. #   endif
  185. # endif
  186.  
  187. # if defined(__SUNPRO_CC)
  188. #   define __STL_NO_BOOL
  189. #   define __STL_NEED_TYPENAME
  190. #   define __STL_NEED_EXPLICIT
  191. #   define __STL_USE_EXCEPTIONS
  192. # endif
  193.  
  194. # if defined(__COMO__)
  195. #   define __STL_MEMBER_TEMPLATES
  196. #   define __STL_MEMBER_TEMPLATE_CLASSES
  197. #   define __STL_CLASS_PARTIAL_SPECIALIZATION
  198. #   define __STL_USE_EXCEPTIONS
  199. #   define __STL_HAS_NAMESPACES
  200. # endif
  201.  
  202. # if defined(__MINGW32__)
  203. #   define __STL_NO_DRAND48
  204. # endif
  205.  
  206. # if defined(__CYGWIN__)
  207. #   define __STL_NO_DRAND48
  208. # endif
  209.  
  210. # if defined(_MSC_VER)
  211. #   define __STL_NO_DRAND48
  212. #   define __STL_NEED_TYPENAME
  213. #   if _MSC_VER < 1100  /* 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */
  214. #     define __STL_NEED_EXPLICIT
  215. #     define __STL_NO_BOOL
  216. #     if  _MSC_VER > 1000
  217. #       include <yvals.h>
  218. #       define __STL_DONT_USE_BOOL_TYPEDEF
  219. #     endif
  220. #   endif
  221. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  222. #   define __SGI_STL_NO_ARROW_OPERATOR
  223. #   ifdef _CPPUNWIND
  224. #     define __STL_USE_EXCEPTIONS
  225. #   endif
  226. #   ifdef _MT
  227. #     define __STL_WIN32THREADS
  228. #   endif
  229. #   if _MSC_VER >= 1200
  230. #     define __STL_PARTIAL_SPECIALIZATION_SYNTAX
  231. #     define __STL_HAS_NAMESPACES
  232. #     define __STL_NO_NAMESPACES
  233. #   endif
  234. # endif
  235.  
  236. # if defined(__BORLANDC__)
  237. #   define __STL_NO_DRAND48
  238. #   define __STL_NEED_TYPENAME
  239. #   define __STL_LIMITED_DEFAULT_TEMPLATES
  240. #   define __SGI_STL_NO_ARROW_OPERATOR
  241. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  242. #   ifdef _CPPUNWIND
  243. #     define __STL_USE_EXCEPTIONS
  244. #   endif
  245. #   ifdef __MT__
  246. #     define __STL_WIN32THREADS
  247. #   endif
  248. # endif
  249.  
  250. # if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
  251.     typedef int bool;
  252. #   define true 1
  253. #   define false 0
  254. # endif
  255.  
  256. # ifdef __STL_NEED_TYPENAME
  257. #   define typename
  258. # endif
  259.  
  260. # ifdef __STL_MEMBER_TEMPLATE_KEYWORD
  261. #   define __STL_TEMPLATE template
  262. # else
  263. #   define __STL_TEMPLATE
  264. # endif
  265.  
  266. # ifdef __STL_NEED_EXPLICIT
  267. #   define explicit
  268. # endif
  269.  
  270. # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  271. #   define __STL_NULL_TMPL_ARGS <>
  272. # else
  273. #   define __STL_NULL_TMPL_ARGS
  274. # endif
  275.  
  276. # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
  277.      || defined (__STL_PARTIAL_SPECIALIZATION_SYNTAX)
  278. #   define __STL_TEMPLATE_NULL template<>
  279. # else
  280. #   define __STL_TEMPLATE_NULL
  281. # endif
  282.  
  283. // Use standard-conforming allocators if we have the necessary language
  284. // features.  __STL_USE_SGI_ALLOCATORS is a hook so that users can
  285. // disable new-style allocators, and continue to use the same kind of
  286. // allocators as before, without having to edit library headers.
  287. # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && \
  288.      defined(__STL_MEMBER_TEMPLATES) && \
  289.      defined(__STL_MEMBER_TEMPLATE_CLASSES) && \
  290.     !defined(__STL_NO_BOOL) && \
  291.     !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) && \
  292.     !defined(__STL_LIMITED_DEFAULT_TEMPLATES) && \
  293.     !defined(__STL_USE_SGI_ALLOCATORS)
  294. #   define __STL_USE_STD_ALLOCATORS
  295. # endif
  296.  
  297. # ifndef __STL_DEFAULT_ALLOCATOR
  298. #   ifdef __STL_USE_STD_ALLOCATORS
  299. #     define __STL_DEFAULT_ALLOCATOR(T) allocator<T>
  300. #   else
  301. #     define __STL_DEFAULT_ALLOCATOR(T) alloc
  302. #   endif
  303. # endif
  304.  
  305. // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
  306. // without having to edit library headers.
  307. # if defined(__STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
  308. #   define __STD std
  309. #   define __STL_BEGIN_NAMESPACE namespace std {
  310. #   define __STL_END_NAMESPACE }
  311. #   define __STL_USE_NAMESPACE_FOR_RELOPS
  312. #   define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
  313. #   define __STL_END_RELOPS_NAMESPACE }
  314. #   define __STD_RELOPS std
  315. #   define __STL_USE_NAMESPACES
  316. # else
  317. #   define __STD
  318. #   define __STL_BEGIN_NAMESPACE
  319. #   define __STL_END_NAMESPACE
  320. #   undef  __STL_USE_NAMESPACE_FOR_RELOPS
  321. #   define __STL_BEGIN_RELOPS_NAMESPACE
  322. #   define __STL_END_RELOPS_NAMESPACE
  323. #   define __STD_RELOPS
  324. #   undef  __STL_USE_NAMESPACES
  325. # endif
  326.  
  327. # ifdef __STL_USE_EXCEPTIONS
  328. #   define __STL_TRY try
  329. #   define __STL_CATCH_ALL catch(...)
  330. #   define __STL_THROW(x) throw x
  331. #   define __STL_RETHROW throw
  332. #   define __STL_NOTHROW throw()
  333. #   define __STL_UNWIND(action) catch(...) { action; throw; }
  334. # else
  335. #   define __STL_TRY
  336. #   define __STL_CATCH_ALL if (false)
  337. #   define __STL_THROW(x)
  338. #   define __STL_RETHROW
  339. #   define __STL_NOTHROW
  340. #   define __STL_UNWIND(action)
  341. # endif
  342.  
  343. #ifdef __STL_ASSERTIONS
  344. # include <stdio.h>
  345. # define __stl_assert(expr) \
  346.     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \
  347.               __FILE__, __LINE__, # expr); abort(); }
  348. #else
  349. # define __stl_assert(expr)
  350. #endif
  351.  
  352. #endif /* __STL_CONFIG_H */
  353.  
  354. // Local Variables:
  355. // mode:C++
  356. // End:
  357.